<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/list_bl.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/list_bl.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0xJU1RfQkxfSF8w"><span class="b">_LINUX_LIST_BL_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0xJU1RfQkxfSF8w"><span class="b">_LINUX_LIST_BL_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">list</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">bit_spinlock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="k">/*</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * Special version of lists, where head of the list has a lock in the lowest</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> * bit. This is useful for scalable hash tables without increasing memory</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * footprint overhead.</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> *</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * For modification operations, the 0 bit of hlist_bl_head-&gt;first</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> * pointer must be set.</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> *</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * With some small modifications, this can easily be adapted to store several</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * arbitrary bits (not just a single lock bit), if the need arises to store</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> * some fast and compact auxiliary data.</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> */</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_DEBUG_SPINLOCK</span><span class="f">)</span>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a>    <span class="c">1UL</span>
<a name="22" /><span class="False">      22:</span> <span class="f">#</span><span class="n">else</span>
<a name="23" /><span class="False">      23:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a>    <span class="c">0UL</span>
<a name="24" /><span class="True">      24:</span> <span class="f">#</span><span class="n">endif</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="False">      26:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_DEBUG_LIST</span>
<a name="27" /><span class="False">      27:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9CVUdfT05fMA__"><span class="b">LIST_BL_BUG_ON</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_QlVHX09OXzA_"><span class="b">BUG_ON</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="28" /><span class="True">      28:</span> <span class="f">#</span><span class="n">else</span>
<a name="29" /><span class="True">      29:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9CVUdfT05fMA__"><span class="b">LIST_BL_BUG_ON</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="30" /><span class="True">      30:</span> <span class="f">#</span><span class="n">endif</span>
<a name="31" /><span class="True">      31:</span> 
<a name="32" /><span class="True">      32:</span> 
<a name="33" /><span class="True">      33:</span> <span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">{</span>
<a name="34" /><span class="True">      34:</span>     <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">first</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> <span class="f">}</span><span class="f">;</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">{</span>
<a name="38" /><span class="True">      38:</span>     <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">next</span><span class="f">,</span> <span class="f">*</span><span class="f">*</span><span class="b">pprev</span><span class="f">;</span>
<a name="39" /><span class="True">      39:</span> <span class="f">}</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_SU5JVF9ITElTVF9CTF9IRUFEXzA_"><span class="b">INIT_HLIST_BL_HEAD</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">)</span> \
<a name="41" /><span class="True">      41:</span>     <span class="f">(</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="42" /><span class="True">      42:</span> 
<a name="43" /><span class="True">      43:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">INIT_HLIST_BL_NODE</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="44" /><span class="True">      44:</span> <span class="f">{</span>
<a name="45" /><span class="True">      45:</span>     <span class="b">h</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="46" /><span class="True">      46:</span>     <span class="b">h</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> <span class="f">}</span>
<a name="48" /><span class="True">      48:</span> 
<a name="49" /><span class="True">      49:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfYmxfZW50cnlfMA__"><span class="b">hlist_bl_entry</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_Y29udGFpbmVyX29mXzA_"><span class="b">container_of</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span><span class="b">type</span><span class="f">,</span><span class="b">member</span><span class="f">)</span>
<a name="50" /><span class="True">      50:</span> 
<a name="51" /><span class="True">      51:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">hlist_bl_unhashed</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="52" /><span class="True">      52:</span> <span class="f">{</span>
<a name="53" /><span class="True">      53:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">pprev</span><span class="f">;</span>
<a name="54" /><span class="True">      54:</span> <span class="f">}</span>
<a name="55" /><span class="True">      55:</span> 
<a name="56" /><span class="True">      56:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">hlist_bl_first</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="57" /><span class="True">      57:</span> <span class="f">{</span>
<a name="58" /><span class="True">      58:</span>     <span class="m">return</span> <span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="f">)</span>
<a name="59" /><span class="True">      59:</span>         <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">&amp;</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="60" /><span class="True">      60:</span> <span class="f">}</span>
<a name="61" /><span class="True">      61:</span> 
<a name="62" /><span class="True">      62:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_bl_set_first</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">h</span><span class="f">,</span>
<a name="63" /><span class="True">      63:</span>                     <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="64" /><span class="True">      64:</span> <span class="f">{</span>
<a name="65" /><span class="True">      65:</span>     <a href="cpu.c_macros_ref.html#_TElTVF9CTF9CVUdfT05fMA__"><span class="b">LIST_BL_BUG_ON</span></a><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">n</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span>     <a href="cpu.c_macros_ref.html#_TElTVF9CTF9CVUdfT05fMA__"><span class="b">LIST_BL_BUG_ON</span></a><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span> <span class="f">!=</span>
<a name="67" /><span class="True">      67:</span>                             <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="68" /><span class="True">      68:</span>     <span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">=</span> <span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">n</span> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="69" /><span class="True">      69:</span> <span class="f">}</span>
<a name="70" /><span class="True">      70:</span> 
<a name="71" /><span class="True">      71:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">hlist_bl_empty</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="72" /><span class="True">      72:</span> <span class="f">{</span>
<a name="73" /><span class="True">      73:</span>     <span class="m">return</span> <span class="f">!</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">&amp;</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="74" /><span class="True">      74:</span> <span class="f">}</span>
<a name="75" /><span class="True">      75:</span> 
<a name="76" /><span class="True">      76:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_bl_add_head</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span>
<a name="77" /><span class="True">      77:</span>                     <span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="78" /><span class="True">      78:</span> <span class="f">{</span>
<a name="79" /><span class="True">      79:</span>     <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">first</span> <span class="f">=</span> <span class="b">hlist_bl_first</span><span class="f">(</span><span class="b">h</span><span class="f">)</span><span class="f">;</span>
<a name="80" /><span class="True">      80:</span> 
<a name="81" /><span class="True">      81:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">first</span><span class="f">;</span>
<a name="82" /><span class="True">      82:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">first</span><span class="f">)</span>
<a name="83" /><span class="True">      83:</span>         <span class="b">first</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span>
<a name="85" /><span class="True">      85:</span>     <span class="b">hlist_bl_set_first</span><span class="f">(</span><span class="b">h</span><span class="f">,</span> <span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="86" /><span class="True">      86:</span> <span class="f">}</span>
<a name="87" /><span class="True">      87:</span> 
<a name="88" /><span class="True">      88:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__hlist_bl_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="89" /><span class="True">      89:</span> <span class="f">{</span>
<a name="90" /><span class="True">      90:</span>     <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">next</span> <span class="f">=</span> <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="91" /><span class="True">      91:</span>     <span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="f">*</span><span class="b">pprev</span> <span class="f">=</span> <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span><span class="f">;</span>
<a name="92" /><span class="True">      92:</span> 
<a name="93" /><span class="True">      93:</span>     <a href="cpu.c_macros_ref.html#_TElTVF9CTF9CVUdfT05fMA__"><span class="b">LIST_BL_BUG_ON</span></a><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">n</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="94" /><span class="True">      94:</span> 
<a name="95" /><span class="True">      95:</span>     <span class="k">/* pprev may be `first`, so be careful not to lose the lock bit */</span>
<a name="96" /><span class="True">      96:</span>     <span class="f">*</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="f">)</span>
<a name="97" /><span class="True">      97:</span>             <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">next</span> <span class="f">|</span>
<a name="98" /><span class="True">      98:</span>              <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">*</span><span class="b">pprev</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_TElTVF9CTF9MT0NLTUFTS18w"><span class="b">LIST_BL_LOCKMASK</span></a><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="99" /><span class="True">      99:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">next</span><span class="f">)</span>
<a name="100" /><span class="True">     100:</span>         <span class="b">next</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="b">pprev</span><span class="f">;</span>
<a name="101" /><span class="True">     101:</span> <span class="f">}</span>
<a name="102" /><span class="True">     102:</span> 
<a name="103" /><span class="True">     103:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_bl_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="104" /><span class="True">     104:</span> <span class="f">{</span>
<a name="105" /><span class="True">     105:</span>     <span class="b">__hlist_bl_del</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="106" /><span class="True">     106:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9QT0lTT04xXzA_"><span class="b">LIST_POISON1</span></a><span class="f">;</span>
<a name="107" /><span class="True">     107:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9QT0lTT04yXzA_"><span class="b">LIST_POISON2</span></a><span class="f">;</span>
<a name="108" /><span class="True">     108:</span> <span class="f">}</span>
<a name="109" /><span class="True">     109:</span> 
<a name="110" /><span class="True">     110:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_bl_del_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="111" /><span class="True">     111:</span> <span class="f">{</span>
<a name="112" /><span class="True">     112:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">hlist_bl_unhashed</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="113" /><span class="True">     113:</span>         <span class="b">__hlist_bl_del</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="114" /><span class="True">     114:</span>         <span class="b">INIT_HLIST_BL_NODE</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="115" /><span class="True">     115:</span>     <span class="f">}</span>
<a name="116" /><span class="True">     116:</span> <span class="f">}</span>
<a name="117" /><span class="True">     117:</span> 
<a name="118" /><span class="True">     118:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_bl_lock</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">b</span><span class="f">)</span>
<a name="119" /><span class="True">     119:</span> <span class="f">{</span>
<a name="120" /><span class="True">     120:</span>     <span class="b">bit_spin_lock</span><span class="f">(</span><span class="c">0</span><span class="f">,</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="b">b</span><span class="f">)</span><span class="f">;</span>
<a name="121" /><span class="True">     121:</span> <span class="f">}</span>
<a name="122" /><span class="True">     122:</span> 
<a name="123" /><span class="True">     123:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_bl_unlock</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">b</span><span class="f">)</span>
<a name="124" /><span class="True">     124:</span> <span class="f">{</span>
<a name="125" /><span class="True">     125:</span>     <span class="b">__bit_spin_unlock</span><span class="f">(</span><span class="c">0</span><span class="f">,</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="b">b</span><span class="f">)</span><span class="f">;</span>
<a name="126" /><span class="True">     126:</span> <span class="f">}</span>
<a name="127" /><span class="True">     127:</span> 
<a name="128" /><span class="True">     128:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">bool</span> <span class="b">hlist_bl_is_locked</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_bl_head</span> <span class="f">*</span><span class="b">b</span><span class="f">)</span>
<a name="129" /><span class="True">     129:</span> <span class="f">{</span>
<a name="130" /><span class="True">     130:</span>     <span class="m">return</span> <span class="b">bit_spin_is_locked</span><span class="f">(</span><span class="c">0</span><span class="f">,</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="b">b</span><span class="f">)</span><span class="f">;</span>
<a name="131" /><span class="True">     131:</span> <span class="f">}</span>
<a name="132" /><span class="True">     132:</span> 
<a name="133" /><span class="True">     133:</span> <span class="k">/**</span>
<a name="134" /><span class="True">     134:</span> <span class="k"> * hlist_bl_for_each_entry    - iterate over list of given type</span>
<a name="135" /><span class="True">     135:</span> <span class="k"> * @tpos:    the type * to use as a loop cursor.</span>
<a name="136" /><span class="True">     136:</span> <span class="k"> * @pos:    the &amp;struct hlist_node to use as a loop cursor.</span>
<a name="137" /><span class="True">     137:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="138" /><span class="True">     138:</span> <span class="k"> * @member:    the name of the hlist_node within the struct.</span>
<a name="139" /><span class="True">     139:</span> <span class="k"> *</span>
<a name="140" /><span class="True">     140:</span> <span class="k"> */</span>
<a name="141" /><span class="True">     141:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfMA__"><span class="b">hlist_bl_for_each_entry</span></a><span class="f">(</span><span class="b">tpos</span><span class="f">,</span> <span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>        \
<a name="142" /><span class="True">     142:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="b">hlist_bl_first</span><span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                \
<a name="143" /><span class="True">     143:</span>          <span class="b">pos</span> <span class="f">&amp;&amp;</span>                            \
<a name="144" /><span class="True">     144:</span>         <span class="f">(</span><span class="f">{</span> <span class="b">tpos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfYmxfZW50cnlfMA__"><span class="b">hlist_bl_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">tpos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span> <span class="c">1</span><span class="f">;</span><span class="f">}</span><span class="f">)</span><span class="f">;</span> \
<a name="145" /><span class="True">     145:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span>
<a name="146" /><span class="True">     146:</span> 
<a name="147" /><span class="True">     147:</span> <span class="k">/**</span>
<a name="148" /><span class="True">     148:</span> <span class="k"> * hlist_bl_for_each_entry_safe - iterate over list of given type safe against removal of list entry</span>
<a name="149" /><span class="True">     149:</span> <span class="k"> * @tpos:    the type * to use as a loop cursor.</span>
<a name="150" /><span class="True">     150:</span> <span class="k"> * @pos:    the &amp;struct hlist_node to use as a loop cursor.</span>
<a name="151" /><span class="True">     151:</span> <span class="k"> * @n:        another &amp;struct hlist_node to use as temporary storage</span>
<a name="152" /><span class="True">     152:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="153" /><span class="True">     153:</span> <span class="k"> * @member:    the name of the hlist_node within the struct.</span>
<a name="154" /><span class="True">     154:</span> <span class="k"> */</span>
<a name="155" /><span class="True">     155:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfc2FmZV8w"><span class="b">hlist_bl_for_each_entry_safe</span></a><span class="f">(</span><span class="b">tpos</span><span class="f">,</span> <span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>     \
<a name="156" /><span class="True">     156:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="b">hlist_bl_first</span><span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                 \
<a name="157" /><span class="True">     157:</span>          <span class="b">pos</span> <span class="f">&amp;&amp;</span> <span class="f">(</span><span class="f">{</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span> <span class="c">1</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span> <span class="f">&amp;&amp;</span>                  \
<a name="158" /><span class="True">     158:</span>         <span class="f">(</span><span class="f">{</span> <span class="b">tpos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfYmxfZW50cnlfMA__"><span class="b">hlist_bl_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">tpos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span> <span class="c">1</span><span class="f">;</span><span class="f">}</span><span class="f">)</span><span class="f">;</span> \
<a name="159" /><span class="True">     159:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">)</span>
<a name="160" /><span class="True">     160:</span> 
<a name="161" /><span class="True">     161:</span> <span class="f">#</span><span class="n">endif</span>
<a name="162" /><span class="True">     162:</span> </pre>
  </body>
</html>
